/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.laporananggaranpendapatanuangujiantakknwisuda;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.sadhar.sia.common.ClassUtility;
import org.sadhar.sia.framework.ClassApplicationModule;
import org.zkoss.zhtml.Messagebox;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zkex.zul.Jasperreport;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Panel;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;

/**
 * Digunakan untuk menangani komponen laporananggaranpendapatanuangujiantakknwisuda.LaporanAnggaranPendapatanUangUjianTAKKNWisuda.zul
 * @author kris
 */
public class LaporanAnggaranPendapatanUangUjianTAKKNWisudaWnd extends ClassApplicationModule {

    private Checkbox chkboxPosPendapatan;
    private Textbox txtboxPosPendapatan;
    private Textbox txtboxIdPosPendapatan;
    private Checkbox chkboxUnitKerja;
    private Textbox txtboxUnitKerja;
    private Textbox txtboxIdUnitKerja;
    private Combobox cmbboxTahunAwal;
    private Combobox cmbboxTahunAkhir;
    private Radio rdTahun;
    private Radio rdUnitKerja;
    private Radio rdPosPendapatan;
    private String tahunAwal;
    private String tahunAkhir;
    private Jasperreport jasper;
    private Panel panelReport;
    private Button buttonHideExport;
    private Listbox lstboxFormatLaporan;
    private LaporanAnggaranPendapatanUangUjianTAKKNWisudaDAO lapuutakknwd;

    public LaporanAnggaranPendapatanUangUjianTAKKNWisudaWnd() {
        lapuutakknwd = new LaporanAnggaranPendapatanUangUjianTAKKNWisudaDAOImpl();
        tahunAwal = new String();
        tahunAkhir = new String();
    }

    public void onCreate() throws Exception {
        chkboxPosPendapatan = (Checkbox) getFellow("chkboxPosPendapatan");
        txtboxPosPendapatan = (Textbox) getFellow("txtboxPosPendapatan");
        txtboxIdPosPendapatan = (Textbox) getFellow("txtboxIdPosPendapatan");
        chkboxUnitKerja = (Checkbox) getFellow("chkboxUnitKerja");
        txtboxUnitKerja = (Textbox) getFellow("txtboxUnitKerja");
        txtboxIdUnitKerja = (Textbox) getFellow("txtboxIdUnitKerja");
        cmbboxTahunAwal = (Combobox) getFellow("cmbboxTahunAwal");
        cmbboxTahunAkhir = (Combobox) getFellow("cmbboxTahunAkhir");
        rdTahun = (Radio) getFellow("rdTahun");
        rdUnitKerja = (Radio) getFellow("rdUnitKerja");
        rdPosPendapatan = (Radio) getFellow("rdPosPendapatan");
        jasper = (Jasperreport) getFellow("jasper");
        panelReport = (Panel) getFellow("panelReport");
        buttonHideExport = (Button) getFellow("buttonHideExport");
        lstboxFormatLaporan = (Listbox) getFellow("lstboxFormatLaporan");
        loadComboTahunAwal();
        loadComboTahunAkhir();
    }

    /**
     * Digunakan untuk melakukan pengisian data pada komponen cmbboxTahunAwal
     * @throws Exception
     */
    public void loadComboTahunAwal() throws Exception {
        cmbboxTahunAkhir.getItems().clear();
        for (Map map : lapuutakknwd.getTahunAnggaran()) {
            Comboitem item = new Comboitem();
            item.setValue(map);
            item.setLabel(map.get("tahunAnggaran").toString());
            cmbboxTahunAwal.appendChild(item);
        }
    }

    /**
     * Digunakan untuk melakukan pengisian data pada komponen cmbboxTahunAkhir
     * @throws Exception
     */
    public void loadComboTahunAkhir() throws Exception {
        cmbboxTahunAkhir.getItems().clear();
        for (Map map : lapuutakknwd.getTahunAnggaran()) {
            Comboitem item = new Comboitem();
            item.setValue(map);
            item.setLabel(map.get("tahunAnggaran").toString());
            cmbboxTahunAkhir.appendChild(item);
        }
    }

    /**
     * Digunakan untuk mengatur kondisi komponen lain pada saat komponen chkboxUnitKerja di check
     */
    public void chkboxUnitKerjaOnCheck() {
        if (chkboxUnitKerja.isChecked()) {
            //chkboxJenisTagihan.setChecked(false);
        } else {
            txtboxIdUnitKerja.setValue("");
            txtboxUnitKerja.setValue("");
        }
    }

    /**
     * Digunakan untuk mengatur kondisi komponen lain pada saat komponen chkboxPosPendapatan di check
     */
    public void chkboxPosPendapatanOnCheck() {
        if (chkboxPosPendapatan.isChecked()) {
            //chkboxUnitKerja.setChecked(false);
        } else {
            txtboxIdPosPendapatan.setValue("");
            txtboxPosPendapatan.setValue("");
        }
    }

    /**
     * Digunakan ntuk mengambil nilai tahunAnggaran awal pada saat komponen cmbboxTahunAwal di select
     */
    public void cmbboxTahunAwalOnSelect() {
        Map map = (Map) cmbboxTahunAwal.getSelectedItem().getValue();
        tahunAwal = map.get("tahunAnggaran").toString();
    }

    /**
     * Digunakan mengambil nilai tahunAnggaran akhir pada saat komponen cmbboxTahunAkhir di select
     * @throws InterruptedException
     */
    public void cmbboxTahunAkhirOnSelect() throws InterruptedException {
        Map map = (Map) cmbboxTahunAkhir.getSelectedItem().getValue();
        tahunAkhir = map.get("tahunAnggaran").toString();

    }

    /**
     * Digunakan untuk memanggil komponen UnitKerjaPopup.zul
     * @throws InterruptedException
     */
    public void btnCariUnitKerjaOnClick() throws InterruptedException {
        Window win = (Window) Executions.createComponents("sippzul/laporananggaranpendapatanuangujiantakknwisuda/UnitKerjaPopup.zul", this, null);
        win.doModal();
    }

    /**
     * Digunakan untuk memanggil komponen PosPendapatanPopup.zul
     * @throws InterruptedException
     */
    public void btnCariPosPendapatanOnClick() throws InterruptedException {
        Window win = (Window) Executions.createComponents("sippzul/laporananggaranpendapatanuangujiantakknwisuda/PosPendapatanPopup.zul", this, null);
        win.doModal();
    }

    /**
     * Digunakan untuk melakukan pemrosesan pencetakan laporan
     * @throws Exception
     */
    public void btnCetakOnClick() throws Exception {

        if (tahunAwal.equals("") || tahunAkhir.equals("")) {
            Messagebox.show("Data tahun tidak lengkap", "Pesan kesalahan", Messagebox.YES, Messagebox.ERROR);
        } else if (rdTahun.isChecked() == false && rdPosPendapatan.isChecked() == false && rdUnitKerja.isChecked() == false) {
            Messagebox.show("Masukan pilihan", "Pesan kesalahan", Messagebox.YES, Messagebox.ERROR);
        } else {
            if (Integer.valueOf(tahunAkhir) < Integer.valueOf(tahunAwal)) {
                Messagebox.show("Tahun akhir tidak boleh lebih kecil dari tahun awal", "Pesan kesalahan", Messagebox.YES, Messagebox.ERROR);
            } else {
                String kdPos = "";
                String kdUnit = "";
                jasper.setType(lstboxFormatLaporan.getSelectedItem().getValue().toString());
                if (chkboxPosPendapatan.isChecked() && txtboxIdPosPendapatan.getValue().toString() != null) {
                    kdPos = txtboxIdPosPendapatan.getValue().toString();
                }
                if (chkboxUnitKerja.isChecked() && txtboxIdUnitKerja.getValue().toString() != null) {
                    kdUnit = txtboxIdUnitKerja.getValue().toString();
                }
                if (rdPosPendapatan.isChecked()) {
                    jasper.setSrc("reports/laporananggaranpendapatanuangujiantakknwisuda/LaporanAnggaranPendapatanUangUjianTAKKNWisudaByPosPendapatan.jasper");
                    List<Map> data = new ArrayList<Map>();
                    Map map = new HashMap();
                    map.put("tahunAwal", tahunAwal);
                    map.put("tahunAKhir", tahunAkhir);
                    jasper.setParameters(map);
                    jasper.setDatasource(ClassUtility.createDatasource(lapuutakknwd.getReport(tahunAwal, tahunAkhir, kdUnit, kdPos)));
                    tampilkanLaporan();
                }
                if (rdTahun.isChecked()) {
                    jasper.setSrc("reports/laporananggaranpendapatanuangujiantakknwisuda/LaporanAnggaranPendapatanUangUjianTAKKNWisudaByTahun.jasper");
                    List<Map> data = new ArrayList<Map>();
                    Map map = new HashMap();
                    map.put("tahunAwal", tahunAwal);
                    map.put("tahunAKhir", tahunAkhir);
                    jasper.setParameters(map);
                    jasper.setDatasource(ClassUtility.createDatasource(lapuutakknwd.getReport(tahunAwal, tahunAkhir, kdUnit, kdPos)));
                    tampilkanLaporan();
                }
                if (rdUnitKerja.isChecked()) {
                    jasper.setSrc("reports/laporananggaranpendapatanuangujiantakknwisuda/LaporanAnggaranPendapatanUangUjianTAKKNWisudaByUnitKerja.jasper");
                    List<Map> data = new ArrayList<Map>();
                    Map map = new HashMap();
                    map.put("tahunAwal", tahunAwal);
                    map.put("tahunAKhir", tahunAkhir);
                    jasper.setParameters(map);
                    jasper.setDatasource(ClassUtility.createDatasource(lapuutakknwd.getReport(tahunAwal, tahunAkhir, kdUnit, kdPos)));
                    tampilkanLaporan();
                }
            }
        }
    }

    public void tampilkanLaporan() {
        panelReport.setVisible(true);
        panelReport.setOpen(true);
        buttonHideExport.setVisible(true);

    }

    public void btnHide() {
        buttonHideExport.setVisible(false);
        panelReport.setVisible(false);
    }
}
